import sqlite3

# 数据库文件路径（统一配置）
DB_PATH = 'test_database.db'

# 仅用 with 管理一个连接，自动处理连接打开/关闭和事务
with sqlite3.connect(DB_PATH) as conn:
    # 在 with 块内创建游标（与当前连接绑定）
    cursor = conn.cursor()

    try:
        # 1. 创建表（统一在一个 try 块内处理所有操作，异常统一捕获）
        create_table_sql = '''
                CREATE TABLE IF NOT EXISTS users (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    name TEXT NOT NULL,
                    age INTEGER,
                    email TEXT UNIQUE
                )
            '''
        cursor.execute(create_table_sql)
        print("✅ 表创建成功（或已存在）")

        # 2. 插入数据（with 正常结束会自动提交，无需手动 commit）
        insert_data = [
            ("Alice", 25, "alice@example.com"),
            ("Bob", 30, "bob@example.com")
        ]
        # 批量插入更高效（避免重复 execute）
        cursor.executemany(
            "INSERT OR IGNORE INTO users (name, age, email) VALUES (?, ?, ?)",
            insert_data
        )
        print(f"✅ 数据插入成功（新增 {cursor.rowcount} 条）")

        # 3. 删除数据
        cursor.execute("DELETE FROM users WHERE name = ?", ("Bob",))
        print(f"✅ 删除成功（影响 {cursor.rowcount} 条数据）")

        # 4. 更新数据
        cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, "Alice"))
        print(f"✅ 更新成功（影响 {cursor.rowcount} 条数据）")

        # 5. 查询数据
        print("\n📋 所有用户：")
        cursor.execute("SELECT * FROM users")
        for user in cursor.fetchall():
            print(f"ID: {user[0]}, 姓名: {user[1]}, 年龄: {user[2]}, 邮箱: {user[3]}")

        print("\n📋 年龄大于28的用户：")
        cursor.execute("SELECT name, age FROM users WHERE age > ?", (28,))
        for user in cursor.fetchall():
            print(f"姓名: {user[0]}, 年龄: {user[1]}")

    except sqlite3.IntegrityError as e:
        # 单独捕获唯一键冲突（如邮箱重复）
        print(f"\n❌ 数据完整性错误：{e}")
        conn.rollback()  # 异常时回滚
    except sqlite3.Error as e:
        # 捕获所有其他数据库错误
        print(f"\n❌ 操作失败：{e}")
        conn.rollback()  # 异常时回滚
